package com.xzj.mybatis.core;

import com.xzj.mybatis.annotation.Param;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * @ProjectName: SpringDemo
 * @Package: com.xzj.mybatis.core
 * @ClassName: BaseMapper
 * @Author: xzj
 * @Description:
 * @Date: 2022/7/22 11:44
 * @Version: 1.0
 */
public interface BaseMapper<T> extends Mapper<T> {
    int insert(T entity);

    int deleteById(Serializable id);

    int deleteById(T entity);

    int deleteByMap(@Param("cm") Map<String, Object> columnMap);

//    int delete(@Param("ew") Wrapper<T> queryWrapper);

    int deleteBatchIds(@Param("coll") Collection<? extends Serializable> idList);

    int updateById(@Param("et") T entity);

//    int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);

    T selectById(Serializable id);

    List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList);

    List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);

//    default T selectOne(@Param("ew") Wrapper<T> queryWrapper) {
//        List<T> ts = this.selectList(queryWrapper);
//        if (CollectionUtils.isNotEmpty(ts)) {
//            if (ts.size() != 1) {
//                throw ExceptionUtils.mpe("One record is expected, but the query result is multiple records", new Object[0]);
//            } else {
//                return ts.get(0);
//            }
//        } else {
//            return null;
//        }
//    }
//
//    Long selectCount(@Param("ew") Wrapper<T> queryWrapper);
//
//    List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);
//
//    List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper);
//
//    List<Object> selectObjs(@Param("ew") Wrapper<T> queryWrapper);
//
//    <P extends IPage<T>> P selectPage(P page, @Param("ew") Wrapper<T> queryWrapper);
//
//    <P extends IPage<Map<String, Object>>> P selectMapsPage(P page, @Param("ew") Wrapper<T> queryWrapper);
}
